home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / microcrn / issue_44.arc / 86WRLD44.ARC / SWAPDISK.ASM < prev    next >
Assembly Source File  |  1988-08-09  |  2KB  |  133 lines

  1. ;SWAPDISK.ASM
  2. ;
  3. ;    swap drive assignment to, for example, route all drive B requests to C
  4. ;   this program only operates upon floppy drives!!!!!!
  5. ;
  6. ;   Laine Stump, January 1988, No Rights Reserved
  7. ;***************************************************************************
  8.     INCLUDE        MSDOS.MAC    ;macro definitions & other constants
  9. ;
  10. CODE    segment 'CODE'
  11.     assume    cs:code
  12. FIRSTBYTE    equ    this byte    ;between here & LASTBYTE remains res.
  13.  
  14.     ORG    100h
  15. START:    JMP    INIT        ;init code is at end so we can get rid of it.
  16.  
  17. INT13h    equ    this dword
  18.     INT13Ofs    DW    ?
  19.     INT13Seg    DW    ?
  20.  
  21. TABLE    DB    0,1,2,3        ;table of drive translations
  22. KEY    DW    'SD'
  23.  
  24. INTSERV    PROC    FAR
  25.     CMP    AH,0FEh        ;our own private code
  26.     JNE    INTSERV2
  27.  
  28.     CMP     DL,3
  29.     JA    INTRET
  30.     CMP    DH,3
  31.     JA    INTRET
  32.       PUSH      BX
  33.       MOV      BL,DL
  34.       MOV      BH,0
  35.       MOV      TABLE[BX],DH
  36.       POP      BX
  37. INTRET:    IRET
  38.  
  39. INTSERV2:
  40.     CMP    DL,3
  41.     JBE    INTSERVSWAP
  42.     JMP    INT13h
  43.  
  44. INTSERVSWAP:
  45.       PUSH      DX
  46.       PUSH      BX
  47.       MOV      BL,DL
  48.       MOV      BH,0
  49.       MOV      DL,TABLE[BX]
  50.       POP      BX
  51.       PUSHF
  52.       CALL      INT13h
  53.       POP      DX
  54.       RET    2
  55. INTSERV      ENDP
  56.  
  57. LASTBYTE    equ    this byte
  58.  
  59. ;************************************************************************
  60. ;
  61. ;    Below this point only used during initialization, then discarded
  62. ;
  63.     assume    ds:code
  64.  
  65. FIRSTTIME    DB    0
  66.  
  67. ERR    DB    'proper syntax is: SWAPDISK dn where d is a-d and n is 0-3'
  68. ERRLEN    equ    75-18
  69.  
  70. FIRST    DB    'installing SWAPDISK'
  71. FIRSTLEN    equ    37-18
  72.  
  73. INIT:
  74.     MOV    AL,13h            ;get the original INT 13h vector
  75.     DOS    GetVector
  76.  
  77.     CMP    word ptr ES:[BX-2],'SD'    ;if already installed
  78.     JE    ACTION            ;go do the action
  79.  
  80.     MOV    FIRSTTIME,0FFh
  81.     MOV    INT13Ofs,BX        ;else install the new vector
  82.     MOV    INT13Seg,ES
  83.  
  84.     MOV    AL,13h
  85.     MOV    DX,offset INTSERV
  86.     DOS    SetVector
  87.  
  88. ACTION:    MOV    BX,80h
  89.     CMP    byte ptr CS:[BX],0
  90.     JE    DONE
  91.  
  92. ACTION1:INC    BX
  93.     CMP    byte ptr CS:[BX],' '
  94.     JE    ACTION1
  95.     MOV    DX,word ptr CS:[BX]    ;DL=logical, DH=physical
  96.     AND    DL,5Fh            ;make drive letter uppercase
  97.     SUB    DL,'A'            ;DL is A - D
  98.     SUB    DH,'0'            ;DH is 0 - 3
  99.  
  100.     CMP    DL,3
  101.     JA    ACTIONERROR
  102.     CMP    DH,3
  103.     JA    ACTIONERROR
  104.  
  105.     MOV    AH,0FEh            ;call new extended INT 13 service
  106.     INT    13h
  107.     JMP    DONE
  108.  
  109. ACTIONERROR:
  110.     MOV    BX,stdout
  111.     MOV    CX,ERRLEN
  112.     MOV    DX,offset ERR
  113.     DOS    WriteHandle
  114.  
  115.  
  116. DONE:    CMP    FIRSTTIME,0
  117.     JNE    FIRSTEXIT
  118.  
  119.     DOS    EndF
  120.  
  121. FIRSTEXIT:
  122.     MOV    BX,stdout
  123.     MOV    CX,FIRSTLEN
  124.     MOV    DX,offset FIRST
  125.     DOS    WriteHandle
  126.  
  127.     MOV     DX,(LASTBYTE-FIRSTBYTE+15)/16
  128.     MOV    AL,0
  129.     DOS    TerminateKeep
  130.  
  131. CODE    ends
  132.     end     START
  133.